<?php
header('content-type:text/html,charset=uf-8');

class MySQLDB implements I_DAO
{
        private $host;  // 主机地址
        private $port;  // 端口号
        private $user;  // 用户名
        private $pwd;  // 密码
        private $charset;// 字符集
        private $dbname;    // 数据库名
        private static $instance;// 用于保存对象
        // 运行的时候需要的属性
        private $link;
    #构造方法
        private function __construct($arr)
        {
            $this->host=isset($arr['host'])?$arr['host']:'localhost';
            $this->port=isset($arr['port'])?$arr['port']:'3306';
            $this->user=isset($arr['user'])?$arr['user']:'root';
            $this->pwd=isset($arr['pwd'])?$arr['pwd']:'zhuhailingji';
            $this->charset = isset($arr['charset']) ? $arr['charset']:'utf8';
            $this->dbname = isset($arr['dbname']) ? $arr['dbname']:'php24';
            // 连接数据库
            $this->my_connect();
            // 设置默认字符集
            $this->my_charset();
            // 选择默认的数据库
            $this->my_dbname();
        }
    #获得单例对象
        public static function getInstance($arr) 
        {
            if(!self::$instance instanceof self) 
            {
                self::$instance = new self($arr);
            }
            return self::$instance;   
        }
    #连接数据库
        private function my_connect() 
        {
            if($link = @ mysql_connect("$this->host:$this->port", $this->user, $this->pwd)) 
            {
                // 连接成功
                $this->link = $link;
            }
            else 
            {
                // 连接失败
                echo "数据库连接失败！<br />";
                echo "错误代码：" , mysql_errno() , '<br />';
                echo "错误信息：" , mysql_error() , '<br />';
                die;
            }
        }
    #执行语句模块
        public function my_query($sql) 
        {
            // 先执行sql语句
            $result = mysql_query($sql);
            // 再判断是否执行成功
            if(!$result)
            {
                // 执行失败
                echo "SQL语句执行失败！<br />";
                echo "错误代码：" , mysql_errno() , '<br />';
                echo "错误信息：" , mysql_error() , '<br />';
                return false;
            }
            else 
            {
                // 执行成功
                return $result;
            }
        }
    # 选择默认字符集 
        private function my_charset() 
        {
            $sql = "set names $this->charset";
            $this->my_query($sql);
        }
    # 选择默认的数据库
 
        private function my_dbname() 
        {
            $sql = "use $this->dbname";
            $this->my_query($sql);
        }
    #返回查询结果为多行多列的记录
        public function fetchAll($sql)
        {
            // 执行sql语句
            if($result = $this->my_query($sql))
            {
                // 执行成功,遍历结果集
                $rows = array();
                while($row = mysql_fetch_assoc($result))
                {
                    $rows[] = $row;
                }
                // 结果集资源使用完毕最好主动释放
                mysql_free_result($result);
                // 返回所有的数据(二维数组或空数组)
                return $rows;
            }
            else
            {
                return false;
            }
        }

   #返回查询结果为一行多列的记录

        public function fetchRow($sql)
        {
            // 执行sql语句
            if($result = $this->my_query($sql))
            {
                // 执行成功,提取结果集
                $row = mysql_fetch_assoc($result);
                // 结果集资源使用完毕最好主动释放
                mysql_free_result($result);
                // 返回所有的数据(一维数组或空数组)
                return $row;
            }
            else 
            {
                return false;
            }
        }
    #返回查询结果为单行单列的记录
        public function fetchColumn($sql)
        {
            if($result = $this->my_query($sql))
            {
                // 执行成功,提取结果集
                $row = mysql_fetch_row($result);
                // 结果集资源使用完毕最好主动释放
                mysql_free_result($result);
                // 返回这个单一值
                return isset($row[0]) ? $row[0] : false;
            }
            else 
            {
                return false;
            }
        }
    #__sleep
        public function __sleep()
        {
            return array('host', 'port', 'user', 'pwd', 'charset', 'dbname');
        }

     #__wakeup
        public function __wakeup() 
        {
            // 连接数据库
            $this->my_connect();
            // 设置默认字符集
            $this->my_charset();
            // 选择默认的数据库
            $this->my_dbname();
        }

    # __set()
        public function __set($name, $value)
        {
            $allow_set = array('host', 'port', 'user', 'pwd', 'charset', 'dbname');
            if(in_array($name, $allow_set))
            {
                 $this->$name = $value;
            }
        }

     # __get()

        public function __get($name)
        {
            $allow_get = array('host', 'port', 'charset', 'dbname');
            if(in_array($name, $allow_get))
            {
                return $this->$name;
            }
            else
            {
                return NULL;
            }
        }
     # __unset()
        public function __unset($name)
        {
            
        }

    #__isset()
        public function __isset($name)
        {
            $allow_isset = array('host', 'port', 'user', 'pwd', 'charset', 'dbname');
            if(in_array($name, $allow_isset))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    #私有克隆
        private function __clone()
        {
        
        }
    #析构方法  
        public function __destruct() 
        {
            @ mysql_close($this->link);
        }

}


 	   